排列序列
给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。
按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:
- “123”
- “132”
- “213”
- “231”
- “312”
- “321”
给定 n 和 k,返回第 k 个排列。
示例 1:
1 2
| 输入:n = 3, k = 3 输出:"213"
|
示例 2:
1 2
| 输入:n = 4, k = 9 输出:"2314"
|
示例 3:
1 2
| 输入:n = 3, k = 1 输出:"123"
|
提示:
代码:
65%45%
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class Solution { public String getPermutation(int n, int k) { List<Integer> ls= new ArrayList<Integer>(); for(int i=1;i<n+1;i++) ls.add(i); StringBuffer sb=new StringBuffer(); int next=k; for(int i=n-1;i>0;i--) { int f=fact(i); int index=next/f; next=next%f; if(next==0) { index--; next=f; } sb.append(ls.remove(index)); } sb.append(ls.remove(0)); return sb.toString(); } public int fact(int x) { int max=1; if(x==0||x==1)return 1; if(x<0)return -1; for(int i=x;i>=1;i--) max*=i; return max; } }
|